package ar.com.gals.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@SequenceGenerator(
	name = "gals_id_sequence", 
	sequenceName = "usuario_id_seq", 
	allocationSize = 1
)
@Table(name="usuario")
public class Usuario extends Gals {

	@Column(name="codigo")
	private String codigo;
	
	@Column(name="razon_social")
	private String razonSocial;
	
	@Column(name="nombre")
	private String nombre;
	
	@Column(name="apellido")
	private String apellido;
	
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "localidad_id", referencedColumnName = "id")
	private Localidad localidad;
	
	@Column(name="domicilio_calle")
	private String domicilioCalle;
	
	@Column(name="domicilio_numero")
	private int domicilioNumero;
	
	@Column(name="telefono")
	private String telefono;
	
	@Column(name="celular")
	private String celular;
	
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "empleador_id", referencedColumnName = "id")
	private Usuario empleador;
	
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "archivo_id", referencedColumnName = "id")
	private Archivo archivo;
		
	@Column(name="nombre_usuario", nullable = false)
	private String nombreUsuario;
	
	@Column(name="password", nullable = false)
	private String password;
	
	@Column(name="enabled", nullable = false)
	boolean enabled = false;
	
	@Column(name="accountNonExpired", nullable = false)
	boolean accountNonExpired = true;
	
	@Column(name="credentialsNonExpired", nullable = false)
	boolean credentialsNonExpired = true;
	
	@Column(name="accountNonLocked", nullable = false)
	boolean accountNonLocked = true;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "rol_id", referencedColumnName = "id", nullable = false)
	private Rol rol;
	
	
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String getRazonSocial() {
		return razonSocial;
	}
	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getApellido() {
		return apellido;
	}
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	public Localidad getLocalidad() {
		return localidad;
	}
	public void setLocalidad(Localidad localidad) {
		this.localidad = localidad;
	}
	public String getDomicilioCalle() {
		return domicilioCalle;
	}
	public void setDomicilioCalle(String domicilioCalle) {
		this.domicilioCalle = domicilioCalle;
	}
	public int getDomicilioNumero() {
		return domicilioNumero;
	}
	public void setDomicilioNumero(int domicilioNumero) {
		this.domicilioNumero = domicilioNumero;
	}
	public String getTelefono() {
		return telefono;
	}
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	public String getCelular() {
		return celular;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}
	public Usuario getEmpleador() {
		return empleador;
	}
	public void setEmpleador(Usuario empleador) {
		this.empleador = empleador;
	}
	public Archivo getArchivo() {
		return archivo;
	}
	public void setArchivo(Archivo archivo) {
		this.archivo = archivo;
	}
	public String getNombreUsuario() {
		return nombreUsuario;
	}
	public void setNombreUsuario(String nombreUsuario) {
		this.nombreUsuario = nombreUsuario;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public boolean isEnabled() {
		return enabled;
	}
	public void setEnabled(boolean enabled) {
		this.enabled = enabled;
	}
	public boolean isAccountNonExpired() {
		return accountNonExpired;
	}
	public void setAccountNonExpired(boolean accountNonExpired) {
		this.accountNonExpired = accountNonExpired;
	}
	public boolean isCredentialsNonExpired() {
		return credentialsNonExpired;
	}
	public void setCredentialsNonExpired(boolean credentialsNonExpired) {
		this.credentialsNonExpired = credentialsNonExpired;
	}
	public boolean isAccountNonLocked() {
		return accountNonLocked;
	}
	public void setAccountNonLocked(boolean accountNonLocked) {
		this.accountNonLocked = accountNonLocked;
	}
	public Rol getRol() {
		return rol;
	}
	public void setRol(Rol rol) {
		this.rol = rol;
	}
	
	public boolean isAdministrador() {
		return this.rol.isAdministrador();
	}
	public boolean isNegocio() {
		return this.rol.isNegocio();
	}
	public boolean isEmpleado() {
		return this.rol.isEmpleado();
	}
	public String usuarioConectado() {
		if(this.isEmpleado())
			return this.apellido + ", " + this.nombre + " (" + this.empleador.getRazonSocial() + ")";
		
		return this.getRazonSocial();
	}
}
